package com.pureut.storage.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pureut.storage.domain.PickingSale;
import com.pureut.storage.dto.*;
import com.pureut.storage.export.PickingSaleExport;
import com.pureut.storage.vo.GetDataByCodeVo;
import com.pureut.storage.vo.PickingSaleVo;
import com.pureut.storage.vo.ReceiptAndPaymentDocVo;
import com.pureut.storage.vo.SaleInvoiceVo;
import com.sale.common.mybatis.core.mapper.BaseMapperPlus;
import com.sale.common.mybatis.core.page.TableDataInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 销售发货mapper
 *
 * @author: CM
 * @date: 2022/12/27    14:54
 */
@Mapper
public interface PickingSaleMapper extends BaseMapperPlus<PickingSaleMapper, PickingSale, PickingSale> {

    /**
     * 销售发货列表查询
     *
     * @param pickingSaleVo
     * @return
     */
    Page<PickingSaleDto> getPickingSaleList(@Param("page") Page<PickingSaleDto> page, @Param("pickingSaleVo") PickingSaleVo pickingSaleVo);

    /**
     * 销售发货查看
     *
     * @param id
     * @return
     */
    PickingSaleDto getPickingSaleById(@Param("id") Long id);

    /**
     * PDA列表
     *
     * @param pickingSaleVo
     * @return
     */
    List<GetPdaDto> getPickingSaleListPda(PickingSaleVo pickingSaleVo);

    /**
     * 交接列表
     *
     * @param
     * @return
     */
    Page<AndroidHandoverPdaDto> getAndroidHandoverList(@Param("page") Page<AndroidHandoverPdaDto> page, @Param("tableName") String tableName, @Param("status") String status);

    /**
     * PDA查看销售发货详情
     *
     * @param
     * @return
     */
    AndroidHandoverPdaDto getAndroidHandoverView(@Param("id") Long id, @Param("tableName") String tableName);

    /**
     * PDA
     *
     * @param deptId
     * @return
     */
    List<AndroidPdaDto> getMiscellaneousAndroidpickCancellationList(Long deptId);

    /**
     * 销售发货导出
     *
     * @param pickingSaleVo
     * @return
     */
    List<PickingSaleExport> getInfoExport(PickingSaleVo pickingSaleVo);

    /**
     * 销售发货不分页列表
     */
    List<PickingSaleDto> getNoPageList(PickingSaleVo pickingSaleVo);

    /**
     * 销售发货Pda列表(动态根据表名注入)
     *
     * @param page
     * @return
     */
    Page<AndroidPdaDto> getPickSaleAndroidList(@Param("page") Page<AndroidPdaDto> page, @Param("tableName") String tableName, @Param("status1") String status, @Param("status2") String status2);

    /**
     * PDA查看详情
     *
     * @param
     * @param id
     * @return
     */
    AndroidPdaViewDto getPickSaleView(@Param("tableName") String tableName, @Param("id") long id);

    /**
     * 调拨交接列表
     *
     * @param build
     * @return
     */
    Page<AndroidHandoverPdaDto> getAllotHandover(@Param("page") Page<AndroidHandoverPdaDto> build);

    /**
     * 销售发票根据单据类型查询列表
     *
     * @param
     * @return
     */
    Page<SaleInvoiceDto> getSaleInvoice(@Param("page") Page<SaleInvoiceDto> page, @Param("tableName") String tableName, @Param("saleInvoiceVo") SaleInvoiceVo saleInvoiceVo);

    /**
     * 查询收款单销售发货和采购退货列表
     *
     * @param
     * @param saleServiceVo
     * @return
     */
    Page<ReceiptAndPaymentDocDto> getReceiptAndPaymentDoc(@Param("page") Page<ReceiptAndPaymentDocDto> page, @Param("saleServiceVo") ReceiptAndPaymentDocVo saleServiceVo);

    /**
     * 修改开票数量
     */
    boolean updateInvoicedQuatity(@Param("tableName") String tableName, @Param("invoicedQuantity") String invoicedQuantity, @Param("wodDocNum") String wodDocNum);

    /**
     * 修改核单金额
     *
     * @param tableName      表名
     * @param approvedAmount 核算金额
     * @param wodDocNum      出库单号
     * @return
     */
    boolean updateApprovedAmount(@Param("tableName") String tableName, @Param("approvedAmount") String approvedAmount, @Param("wodDocNum") String wodDocNum);

    /**
     * 财务-核销单 通过客户编码获取销售发货数据
     *
     * @param getDataByCodeVo
     * @return
     */
    Page<ImparityDto> selectDataBySupplierCode(@Param("getDataByCodeVo") GetDataByCodeVo getDataByCodeVo, @Param("page") Page<ImparityDto> page);

    /**
     * 付款单
     * @param page
     * @param saleServiceVo
     * @return
     */
    Page<ReceiptAndPaymentDocDto> payment(@Param("page") Page<ReceiptAndPaymentDocDto> page,@Param("saleServiceVo") ReceiptAndPaymentDocVo saleServiceVo);

    /**
     * 财务-核销单 通过获取未全部核销的销售发货单
      */
    List<ImparityDto> getNoVerification(@Param("getDataByCodeVo") GetDataByCodeVo getDataByCodeVo);

    /**
     * 手持Pda采购退货列表
     * @param page
     * @param tableName
     * @param status
     * @param status2
     * @return
     */
    Page<AndroidPdaDto> getPickSaleAndroidCgList(@Param("page") Page<AndroidPdaDto> page, @Param("tableName") String tableName, @Param("status1") String status, @Param("status2") String status2);

    /**
     * 手持Pda调拨单详情
     * @param id
     * @param tableName
     * @return
     */
    AndroidHandoverPdaDto getAndroidHandoverAllotView(@Param("id") Long id, @Param("tableName") String tableName);

    /**
     * 查询销售发货仓库单据数据（结账反结账使用）
     */
    List<PickingSaleDto> getQClosingDocument(String time);

    /**
     * 查询销售发货仓库单据数据（结账反结账使用）
     */
    List<PickingSaleDto> getRClosingDocument(String time);

    /**
     * 销售发货拣货撤销PDA列表
     * @param deptId
     * @param page
     * @return
     */
    Page<AndroidPdaDto> getCancelPda(@Param("deptId") Long deptId, Page<AndroidPdaDto> page);

    /**
     * 销售发货交接Pda列表
     * @param deptId
     * @param page
     * @return
     */
    Page<AndroidHandoverPdaDto> getHandoverList(@Param("deptId") Long deptId,@Param("page") Page<Object> page);
}
